   #include<wx/wx.h>
#include"SahovskaPloca.h"
//#include"SahovskoPolje.h"
#include "Frame.h"

int SahovskaPloca::player=1;
SahovskaPloca::SahovskaPloca()
	{
		init();
	}

void SahovskaPloca::init() {
		
		WKing=false;
		BKing=false;
		WrongMoveBKingAttack=WrongMoveWKingAttack=false;
		CrniPotez=BijeliPotez=false;
		WKingX=WKingY=BKingX=BKingY=-1;
		WNapadacX=WNapadacY=BNapadacX=BNapadacY=-1;
		oznacenoPolja = 0;
		leftPloce=100;
		topPloce=100;
		int krajRetka=0;
		int counter=0;
		int bijelo=0;
		int crno=1;
		Figura *figuraBijela[16];
		wxBitmap  *g_TestBitmapBijela[16];
		Figura *figuraCrna[16];
		wxBitmap  *g_TestBitmapCrna[16];
		wxString poljeImenaFigura[32]={"RookB.png", "BishopB.png", "HorseB.png", "KingB.png", "QueenB.png", "HorseB.png", "BishopB.png", "RookB.png",
										"PawnB.png", "PawnB.png", "PawnB.png", "PawnB.png", "PawnB.png", "PawnB.png", "PawnB.png", "PawnB.png", 
										"PawnW.png", "PawnW.png", "PawnW.png", "PawnW.png", "PawnW.png", "PawnW.png", "PawnW.png", "PawnW.png", 
										"RookW.png", "BishopW.png", "HorseW.png", "QueenW.png", "KingW.png", "HorseW.png", "BishopW.png", "RookW.png"};
		wxPathList pathList;
		pathList.Add(_T("."));
		for(int i=0;i<16;i++)
		{
			//g_TestBitmapCrna[i]=(wxBitmap *) NULL;
			//g_TestBitmapCrna[i]=new wxBitmap();
		}
		//popunjavanje polja figuraCrna sa figurama
		for(int i=0;i<16;i++)
		{
			wxInitAllImageHandlers();
			wxPathList pathList;
			pathList.Add(_T("."));
			wxString path = pathList.FindValidPath(_T(poljeImenaFigura[i]));
			g_TestBitmapCrna[i]=new wxBitmap(path,wxBITMAP_TYPE_PNG);
			figuraCrna[i]=new Figura(*g_TestBitmapCrna[i], 2,poljeImenaFigura[i]);
		}
		//popunjavanje polja figuraBijela sa figurama
		for(int i=0;i<16;i++)
		{
			wxInitAllImageHandlers();
			wxPathList pathList;
			pathList.Add(_T("."));
			wxString path = pathList.FindValidPath(_T(poljeImenaFigura[i+16]));
			g_TestBitmapBijela[i]=new wxBitmap(path,wxBITMAP_TYPE_PNG);
			figuraBijela[i]=new Figura(*g_TestBitmapBijela[i], 1,poljeImenaFigura[i+16]);
		}

		for(int i=0;i<8;i++){
			for(int j=0;j<8;j++)
			{
				polje[i][j]=new SahovskoPolje();
				
					//polje=new SahovskoPolje();
			}
		}
		//postavljanje boje na sahovsko polje
		for(int i=0;i<8;i++)
			for(int j=0;j<8;j++)
			{
				if(i%2==1){
					if(j%2==0)
						SahovskaPloca::polje[i][j]->SetCrno();
					else
						SahovskaPloca::polje[i][j]->SetBijelo();
				}
				if(i%2==0)
				{
					if(j%2==0)
						SahovskaPloca::polje[i][j]->SetBijelo();
					else
						SahovskaPloca::polje[i][j]->SetCrno();
				}
			}
	//postavljanje figura na plocu
		int k = 0;
		for(int i=0;i<2;i++)
			for(int j=0;j<8;j++) {
				SahovskaPloca::polje[i][j]->SetFigura(figuraCrna[k]);
				SahovskaPloca::polje[i][j]->zauzeto = true;
				k++;
			}
	//postavljanje figura na plocu
		k = 0;
		for(int i=6;i<8;i++)
			for(int j=0;j<8;j++) {
				SahovskaPloca::polje[i][j]->SetFigura(figuraBijela[k]);
				SahovskaPloca::polje[i][j]->zauzeto = true;
				k++;
			}
		
}

void SahovskaPloca::SetFrame(Frame* frame)
{
	m_frame=frame;
}
int SahovskaPloca::GetPoljeVelicina(int i,int j)
	{
		return polje[i][j]->GetVelicinaPolja();
	}

void SahovskaPloca::NacrtajPlocu(wxPaintDC *dc)
	{
		//wxPaintDC dc;
		for(int i=0;i<8;i++)
			for(int j=0;j<8;j++) {
				if (!polje[j][i]->oznaceno) {
					if (polje[j][i]->GetBijelo()) {
						dc->SetBrush(wxBrush(wxColour(255, 255, 255), wxSOLID));
					} else
					{
						dc->SetBrush(wxBrush(wxColour(0, 0, 0), wxSOLID));
					}
				}
				else {
						dc->SetBrush(wxBrush(wxColour(125, 125, 125), wxSOLID));
				}
				dc->DrawRectangle(SahovskaPloca::GetPoljeVelicina(j,i)*i,SahovskaPloca::GetPoljeVelicina(j,i)*j,SahovskaPloca::GetPoljeVelicina(j,i),SahovskaPloca::GetPoljeVelicina(i,j));
				polje[i][j]->CoordX = GetPoljeVelicina(j,i)*j;
				polje[i][j]->CoordY = GetPoljeVelicina(j,i)*i;
			}
	}

void SahovskaPloca::NacrtajFigure(wxDC *destDC)
{
		
		for(int i=0;i<8;i++)
			for(int j=0;j<8;j++)
			{
				if(SahovskaPloca::polje[i][j]->IsZauzeto())
				{
					SahovskaPloca::polje[i][j]->GetFigura().Nacrtaj(*destDC, polje[i][j]->CoordX, polje[i][j]->CoordY);
				}
			}
}

void SahovskaPloca::OznaciPolje(int x, int y)
{
	//bufer varijable za zadrzavanje vrijdnosti oznacenih polja
	//int bufX1,bufY1;
	//int bufX2,bufY2;
	//bufX1=x;
	//bufY1=y;

	if (oznacenoPolja == 0) {
		x1 = x - 1;
		y1 = y - 1;
	}

	if (oznacenoPolja == 2)
	{
		return;
	}
	
	if (oznacenoPolja == 1)
	{
		//bufX2=x;
		//bufY2=y;
		x2 = x - 1;
		y2 = y - 1;
		if (polje[x-1][y-1]->oznaceno)
		{
			polje[x-1][y-1]->oznaceno = false;
			oznacenoPolja--;
			return;
		}
	}

	oznacenoPolja++;
	polje[x-1][y-1]->oznaceno = true;
	
	int a=0;
	int b=0;
	int c=0;
	int d=0;
	bool getbijeli;
	bool getcrni;
	if (oznacenoPolja == 2 && DozvoljenPotez(&x1, &y1, &x2, &y2)) {
		SetTkoPovlaciPotez(x1, y1);   
        if((WKingUnderAttack() && x1!=WKingX && y1!=WKingY && GetBijeliPotez()) && (WKingUnderAttack() && x2!=BNapadacX && y2!=BNapadacY))
            WrongMoveWKingAttack=true;
        else if((BKingUnderAttack() && x1!=BKingX && y1!=BKingY && GetCrniPotez()) && (BKingUnderAttack() && x2!=WNapadacX && y2!=WNapadacY))
            WrongMoveBKingAttack=true;
        else
        {
            WrongMoveBKingAttack=false;
            WrongMoveWKingAttack=false;
			a=SahovskaPloca::polje[x1][y1]->GetFigura().GetBoja();
			b=GetBijeliPotez() && player%2;
			c=GetCrniPotez() && player%2;
			getbijeli=GetBijeliPotez();
			getcrni=GetCrniPotez();
			if(GetBijeliPotez() && player%2!=0 && m_frame->isServer)	{
                Potez(&x1, &y1, &x2, &y2);
			}
			else if(GetCrniPotez() && player%2==0 && !m_frame->isServer)
                Potez(&x1, &y1, &x2, &y2);
        }		
		
	}

}

void SahovskaPloca::OdZnaciPolja()
{
	oznacenoPolja = 0;
	polje[x1][y1]->oznaceno = false;
	polje[x2][y2]->oznaceno = false;

}

void SahovskaPloca::GetOznacenaPolja(int *x1, int *y1, int *x2, int *y2)
 {
	int trazimoPolje = 1;

	for (int i=0; i<8; i++) {
		for (int j=0; j<8; j++) {
			if (polje[i][j]->oznaceno) {
				if (trazimoPolje == 1) {
					*x1 = i;
					*y1 = j;
					trazimoPolje++;
				}
				else {
					*x2 = i;
					*y2 = j;
				}
			}
		}
	}
}

SahovskoPolje* SahovskaPloca::GetPolje(int x, int y)
{
	return polje[x][y];
}


void SahovskaPloca::Potez(int *x1, int *y1, int *x2, int *y2)
{
	
	Figura *tempfigura=new Figura(SahovskaPloca::polje[*x1][*y1]->GetFigura().GetSlika(), SahovskaPloca::polje[*x1][*y1]->GetFigura().GetBoja(), SahovskaPloca::polje[*x1][*y1]->GetFigura().GetVrsta());
	SahovskaPloca::polje[*x2][*y2]->zauzeto=true;
	SahovskaPloca::polje[*x1][*y1]->zauzeto=false;
	SahovskaPloca::polje[*x2][*y2]->SetFigura(tempfigura);

	if(SahovskaPloca::polje[*x2][*y2]->GetFigura().GetVrsta()=="KingW.png")
	{
		if(SahovskaPloca::WKingUnderAttack())
		{
			SahovskaPloca::polje[*x2][*y2]->zauzeto=false;
			SahovskaPloca::polje[*x1][*y1]->zauzeto=true;
			SahovskaPloca::polje[*x1][*y1]->SetFigura(tempfigura);
		}
	}
	if(SahovskaPloca::polje[*x2][*y2]->GetFigura().GetVrsta()=="KingB.png")
	{
		if(SahovskaPloca::BKingUnderAttack())
		{
			SahovskaPloca::polje[*x2][*y2]->zauzeto=false;
			SahovskaPloca::polje[*x1][*y1]->zauzeto=true;
			SahovskaPloca::polje[*x1][*y1]->SetFigura(tempfigura);
		}
	}
	if(SahovskaPloca::polje[*x2][*y2]->GetFigura().GetBoja()==2)
	{
		if(SahovskaPloca::BKingUnderAttack())
		{
			SahovskaPloca::polje[*x2][*y2]->zauzeto=false;
			SahovskaPloca::polje[*x1][*y1]->zauzeto=true;
			SahovskaPloca::polje[*x1][*y1]->SetFigura(tempfigura);
		}
	}
	if(SahovskaPloca::polje[*x2][*y2]->GetFigura().GetBoja()==1)
	{
		if(SahovskaPloca::WKingUnderAttack())
		{
			SahovskaPloca::polje[*x2][*y2]->zauzeto=false;
			SahovskaPloca::polje[*x1][*y1]->zauzeto=true;
			SahovskaPloca::polje[*x1][*y1]->SetFigura(tempfigura);
		}
	}
	player++;
}

bool SahovskaPloca::UndoPotez (int *x1, int *y1, int *x2, int *y2)
{
	Figura *tempfigura=new Figura(SahovskaPloca::polje[*x1][*y1]->GetFigura().GetSlika(), SahovskaPloca::polje[*x1][*y1]->GetFigura().GetBoja(), SahovskaPloca::polje[*x1][*y1]->GetFigura().GetVrsta());
	SahovskaPloca::Potez(x1, y1, x2, y2);
	SahovskaPloca::polje[*x2][*y2]->zauzeto=false;
	SahovskaPloca::polje[*x1][*y1]->zauzeto=true;
	SahovskaPloca::polje[*x1][*y1]->SetFigura(tempfigura);
	return false;
}

bool SahovskaPloca::DozvoljenPotez(int *x1, int *y1, int *x2, int *y2)
{
	int boja2=0;
	if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto())
		boja2=SahovskaPloca::polje[*x2][*y2]->GetFigura().GetBoja();
	if(SahovskaPloca::polje[*x1][*y1]->IsZauzeto())
	{
		int boja=SahovskaPloca::polje[*x1][*y1]->GetFigura().GetBoja();
		int counterBijeli=0;
		int counterCrni =0;
		wxString vrsta=SahovskaPloca::polje[*x1][*y1]->GetFigura().GetVrsta();
		vrsta=vrsta.SubString(0, vrsta.Length()-6);
		if(vrsta=="King" && *x2>=*x1-1 && *x2<=*x1+1 && *y2>=*y1-1 && *y2<=*y1+1)
		{
			if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto()==false)
				return true;
			else if(boja2!=0 && boja!=boja2)
				return true;
		}
		else if(vrsta=="Queen" && (IstaDijagonala(*x1, *y1, *x2, *y2) || IstaParalela(*x1, *y1, *x2, *y2)))
		{
			if(!FiguraNaPutu(*x1, *y1, *x2, *y2))
			{
				if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto()==false)
					return true;
				else if(boja2!=0 && boja!=boja2)
					return true;
			}
		}
		else if (vrsta=="Rook" && IstaParalela(*x1, *y1, *x2, *y2))
		{
			if(!FiguraNaPutu(*x1, *y1, *x2, *y2))
			{
				if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto()==false)
					return true;
				else if(boja2!=0 && boja!=boja2)
					return true;
			}
		}
		else if(vrsta=="Bishop" && IstaDijagonala(*x1, *y1, *x2, *y2))
		{
			if(!FiguraNaPutu(*x1, *y1, *x2, *y2))
			{
				if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto()==false)
					return true;
				else if(boja2!=0 && boja!=boja2)
					return true;
			}
		}
		else if(vrsta=="Pawn" && boja==2)
		{
			//crni pijuni
			for(int i=0; i<8; i++)
			{
				if(SahovskaPloca::polje[1][i]->GetFigura().GetVrsta()=="PawnB.png" && SahovskaPloca::polje[1][i]->IsZauzeto())
					counterCrni++;
			}
			if(counterCrni==8)
			{
				for(int i =0; i<8; i++)
				{
					if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto()==false && *y1==*y2 && ((*y2==i && *x2==2) || (*y2==i && *x2==3)))
						return true;
				}
			}
			else
				{
				for(int i =0; i<8; i++)
				{
					if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto()==false && *y1==*y2 && (*y2==i && *x2==*x1+1))
						return true;
					if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto()==true && SahovskaPloca::polje[*x2][*y2]->GetFigura().GetBoja()==1 && (*y2==*y1+1 || *y2==*y1-1) && *x2==*x1+1)
						return true;
				}
			}
		}
		else if(vrsta=="Pawn" && boja==1)
		{
			//bijeli pijuni
			for(int i=0; i<8; i++)
			{
				if(SahovskaPloca::polje[6][i]->GetFigura().GetVrsta()=="PawnW.png" && SahovskaPloca::polje[6][i]->IsZauzeto())
					counterBijeli++;
			}
			if(counterBijeli==8)
			{
				for(int i =0; i<8; i++)
				{
					if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto()==false && *y1==*y2 && ((*y2==i && *x2==5) || (*y2==i && *x2==4)))
						return true;
				}
			}
			else
			{
				for(int i =0; i<8; i++)
				{
					if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto()==false && *y1==*y2 && (*y2==i && *x2==*x1-1))
						return true;
					if(SahovskaPloca::polje[*x2][*y2]->IsZauzeto()==true && SahovskaPloca::polje[*x2][*y2]->GetFigura().GetBoja()==2 && (*y2==*y1+1 || *y2==*y1-1) && *x2==*x1-1)
						return true;
				}
			}
		}
		if(vrsta=="Horse")
		{
			if((*x2==*x1-2 || *x2==*x1+2) && (*y2==*y1+1 || *y2==*y1-1))
				return true;
			if((*y2==*y1-2 || *y2==*y1+2) && (*x2==*x1+1 || *x2==*x1-1))
				return true;
		}
		else
			return false;
	}
	else
	{
		return false;
	}
	return false;
}

bool SahovskaPloca::BKingUnderAttack()
{	int a1, b1;
	wxString vrsta="";
	for(int i=0;i<8;i++)
			for(int j=0;j<8;j++)
			{
				if(SahovskaPloca::polje[i][j]->IsZauzeto())
					vrsta=SahovskaPloca::polje[i][j]->GetFigura().GetVrsta();
				if(vrsta=="KingB.png")
				{
					BKingX=i;
					BKingY=j;
					vrsta="";
				}
			}
	for(int i=0;i<8;i++)
	{
			for(int j=0;j<8;j++)
			{
				if(SahovskaPloca::polje[i][j]->IsZauzeto() && SahovskaPloca::polje[i][j]->GetFigura().GetBoja()==1)
				{
					WNapadacX=i;
					WNapadacY=j;
					if(SahovskaPloca::DozvoljenPotez(&WNapadacX, &WNapadacY, &BKingX, &BKingY))
					{
						//BKing=true;

						//WKing=BKing=false;
						return true;
					}
				}
			}
	}
	WNapadacX=WNapadacY=BNapadacX=BNapadacY=-1;
	return false;
}

bool SahovskaPloca::WKingUnderAttack()
{	int a1, b1, a2, b2;
	wxString vrsta="";
	for(int i=0;i<8;i++)
			for(int j=0;j<8;j++)
			{
				if(SahovskaPloca::polje[i][j]->IsZauzeto())
					vrsta=SahovskaPloca::polje[i][j]->GetFigura().GetVrsta();
				if(vrsta=="KingW.png")
				{
					WKingX=i;
					WKingY=j;
					vrsta="";
				}
			}
	for(int i=0;i<8;i++)
	{
			for(int j=0;j<8;j++)
			{
				if(SahovskaPloca::polje[i][j]->IsZauzeto() && SahovskaPloca::polje[i][j]->GetFigura().GetBoja()==2)
				{
					BNapadacX=i;
					BNapadacY=j;
					if(SahovskaPloca::DozvoljenPotez(&BNapadacX, &BNapadacY, &WKingX, &WKingY))
					{
						//WKing=BKing=false;
						return true;
					}
				}
			}
	}
	WNapadacX=WNapadacY=BNapadacX=BNapadacY=-1;
	return false;
}

bool SahovskaPloca::GetWrongMoveBKingAttack()
{
	return SahovskaPloca::WrongMoveBKingAttack;
}
bool SahovskaPloca::GetWrongMoveWKingAttack()
{
	return SahovskaPloca::WrongMoveWKingAttack;
}

void SahovskaPloca::SetTkoPovlaciPotez(int x, int y)
{
	int boja=SahovskaPloca::polje[x][y]->GetFigura().GetBoja();
	if(boja==1)
	{
		SahovskaPloca::BijeliPotez=true;
		SahovskaPloca::CrniPotez=false;
	}
	else
	{
		SahovskaPloca::CrniPotez=true;
		SahovskaPloca::BijeliPotez=false;
	}
}
bool SahovskaPloca::WKingCkeckMate()
{
	int bijelaX, bijelaY;
	if(NumOfWhitePieces()!=0)
	{
		if(NumOfWhitePieces()==1)
		{
				for(int i=0;i<8;i++)
				{
					for(int j=0;j<8;j++)
					{
						//if(!SahovskaPloca::polje[i][j]->IsZauzeto())
						//{
							if(SahovskaPloca::DozvoljenPotez(&WKingX, &WKingY, &i, &j))
							{
								int exWKingX=WKingX;
								int exWKingY=WKingY;
								Potez(&WKingX, &WKingY, &i, &j);
								if(WKingUnderAttack())
									UndoPotez(&exWKingX, &exWKingY, &i, &j);
								else
								{
									UndoPotez(&exWKingX, &exWKingY, &i, &j);
									return false;
								}
							}
						//}
					}
				}
		}
		else
		{
			for(int i=0;i<8;i++)
			{
				for(int j=0;j<8;j++)
				{
					if(SahovskaPloca::polje[i][j]->IsZauzeto() && SahovskaPloca::polje[i][j]->GetFigura().GetBoja()==1)
					{
						bijelaX=i;
						bijelaY=j;
						for(int i=0;i<8;i++)
						{
							for(int j=0;j<8;j++)
							{
								//if(!SahovskaPloca::polje[i][j]->IsZauzeto())
								//{
									if(SahovskaPloca::DozvoljenPotez(&bijelaX, &bijelaY, &i, &j))
										return false;
								//}
							}
						}
					}
				}
			}
		}
	}
	return true;
}
bool SahovskaPloca::BKingCheckMate()
{
	int crnaX, crnaY;
	if(NumOfBlackPieces()!=0)
	{
		if(NumOfBlackPieces()==1)
		{
				for(int i=0;i<8;i++)
				{
					for(int j=0;j<8;j++)
					{
						//if(!SahovskaPloca::polje[i][j]->IsZauzeto())
						//{
							if(SahovskaPloca::DozvoljenPotez(&BKingX, &BKingY, &i, &j))
							{
								int exBKingX=BKingX;
								int exBKingY=BKingY;
								Potez(&BKingX, &BKingY, &i, &j);
								if(BKingUnderAttack())
									UndoPotez(&exBKingX, &exBKingY, &i, &j);
								else
								{
									UndoPotez(&exBKingX, &exBKingY, &i, &j);
									return false;
								}
							}
						//}
					}
				}
		}
		else
		{
			for(int i=0;i<8;i++)
			{
				for(int j=0;j<8;j++)
				{
					if(SahovskaPloca::polje[i][j]->IsZauzeto() && SahovskaPloca::polje[i][j]->GetFigura().GetBoja()==2)
					{
						crnaX=i;
						crnaY=j;
						for(int i=0;i<8;i++)
						{
							for(int j=0;j<8;j++)
							{
								//if(!SahovskaPloca::polje[i][j]->IsZauzeto())
								//{
									if(SahovskaPloca::DozvoljenPotez(&crnaX, &crnaY, &i, &j))
										return false;
								//}
							}
						}
					}
				}
			}
		}
	}
	return true;
}
int SahovskaPloca::NumOfBlackPieces()
{
	int counter=0;
	for(int i=0;i<8;i++)
	{
			for(int j=0;j<8;j++)
			{
				if(SahovskaPloca::polje[i][j]->IsZauzeto() && SahovskaPloca::polje[i][j]->GetFigura().GetBoja()==2)
				{
					counter++;
				}
			}
	}
	return counter;
}
int SahovskaPloca::NumOfWhitePieces()
{
	int counter=0;
	for(int i=0;i<8;i++)
	{
			for(int j=0;j<8;j++)
			{
				if(SahovskaPloca::polje[i][j]->IsZauzeto() && SahovskaPloca::polje[i][j]->GetFigura().GetBoja()==1)
				{
					counter++;
				}
			}
	}
	return counter;
}
bool SahovskaPloca::PiecesOnInitialPosition()
{
	int counter;
	for(int i=0;i<8;i++)
	{
			for(int j=2;j<6;j++)
			{
				if(SahovskaPloca::polje[i][j]->IsZauzeto() && SahovskaPloca::polje[i][j]->GetFigura().GetBoja()==1)
				{
					counter++;
				}
			}
	}
	if(counter!=32)
		return false;
	else
		return true;
}
bool SahovskaPloca::GetBijeliPotez()
{
	return BijeliPotez;
}
bool SahovskaPloca::GetCrniPotez()
{
	return CrniPotez;
}


bool SahovskaPloca::IstaDijagonala(int x1, int y1, int x2, int y2)
{
	int tempx=x1, tempy=y1;
	while(x1<8 && y1<8)
	{
		x1++; y1++;
		if(x1==x2 && y1==y2)
			return true;
	}
	x1=tempx;
	y1=tempy;
	while(x1>=0 && y1>=0)
	{
		x1--; y1--;
		if(x1==x2 && y1==y2)
			return true;
	}
	x1=tempx;
	y1=tempy;
	while(x1>=0 && y1<8)
	{
		x1--; y1++;
		if(x1==x2 && y1==y2)
			return true;
	}
	x1=tempx;
	y1=tempy;
	while(x1<8 && y1>=0)
	{
		x1++; y1--;
		if(x1==x2 && y1==y2)
			return true;
	}
	return false;
}

bool SahovskaPloca::IstaParalela(int x1, int y1, int x2, int y2)
{
	if(x1==x2 || y1==y2)
		return true;
	else
		return false;
}
bool SahovskaPloca::FiguraNaPutu(int x1, int y1, int x2, int y2)
{
	if(IstaParalela(x1, y1, x2, y2))
	{
		if(y1==y2 && x1<x2)
		{
			for(int i=x1+1; i<x2; i++)
				if(SahovskaPloca::polje[i][y1]->IsZauzeto ())
					return true;
		}
		else if(y1==y2 && x1>x2)
		{
			for(int i=x1-1; i>x2; i--)
				if(SahovskaPloca::polje[i][y1]->IsZauzeto ())
					return true;
		}
		if(x1==x2 && y1<y2)
		{
			for(int i=y1+1; i<y2; i++)
				if(SahovskaPloca::polje[x1][i]->IsZauzeto ())
					return true;
		}
		else if(x1==x2 && y1>y2)
		{
			for(int i=y1-1; i>y2; i--)
				if(SahovskaPloca::polje[x1][i]->IsZauzeto ())
					return true;
		}
	}
	if(IstaDijagonala(x1, y1, x2, y2))
	{
		int tempx1=x1;
		int tempy1=y1;
		if(x1>x2 && y1>y2)
		{
			while(x1>x2+1 && y1>y2+1)
			{
				x1--; y1--;
				if(SahovskaPloca::polje[x1][y1]->IsZauzeto())
					return true;
			}
		}
		if(x1<x2 && y1<y2)
		{
			while(x1<x2-1 && y1<y2-1)
			{
				x1++; y1++;
				if(SahovskaPloca::polje[x1][y1]->IsZauzeto())
					return true;
			}
		}
		if(x1<x2 && y1>y2)
		{
			while(x1<x2-1 && y1>y2+1)
			{
				x1++; y1--;
				if(SahovskaPloca::polje[x1][y1]->IsZauzeto())
					return true;
			}
		}
		if(x1>x2 && y1<y2)
		{
			while(x1>x2+1 && y1<y2)
			{
				x1--; y1++;
				if(SahovskaPloca::polje[x1][y1]->IsZauzeto())
					return true;
			}
		}
	}
	return false;
}

SahovskaPloca::~SahovskaPloca()
{
	for(int i=0;i<8;i++)
		for(int j=0;j<8;j++)
			delete polje[i][j];	
	delete m_frame;
}